Оператор [websocket]
Описание
Оператор [websocket] предназначен для передачи данных в интерфейс пользователя в режиме реального времени. При заданных условиях, на каждой итерации выполнения правила, [websocket] передаёт значения указанных логических узлов.
Пример использования
Пример правила состоит из 3-х узлов:
- Узел N1_timeout — таймер обратного отсчёта (см. оператор
[timeout]) - Узел N2_switch — переключает слот GSM-модема на резервную SIM-карту
- Узел N3_web_update — передаёт данные вычисленных узлов в веб-интерфейс
Узел "N1_timeout" -- Создаём узел для загрузки в него временного интервала с обратным отсчётом.
-----------------
N1_timeout = {
-- узел "N1_timeout" хранит количество секунд, уменьшаемое во времени.
-- Для краткости - код не указан.
},
Узел "N2_switch"
----------------
N2_switch = { -- Создаём узел, выполняющий переключение на резервную сим-карту.
{
["skip"] = function (nodes) -- При помощи оператора ["skip"] проверяем не истекло ли время задержки.
local stil_wait = (nodes.timeout.value > 0) -- Если счётчик обратного отсчёта, хранимый в узле "N1_timeout", всё ещё больше нуля,
return stil_wait -- то пропускаем выполнение следующих операторов (load-ubus, frozen).
end
},
{
["load-ubus"] = function (nodes) -- При помощи оператора ["load-ubus"] отправляем на системную шину команду "switch" -
return { -- т.е. - переключение на резервный слот сим-карты.
object = "tsmstm",
method = "switch",
}
end
},
{
["frozen"] = function (nodes) -- При помощи оператора ["frozen"] "замораживаем" узел на 30 секунд,
return 30 -- предотвращая обработку данного узла на следующих итерациях.
end -- Это даёт прибору время, необходимое для завершения процедуры переключения слотов.
},
},
Узел "N3_web_update"
-------------------- -- Создаём узел для отправки данных в веб-интерфейс.
N3_web_update = {
{ -- Оператор ["websocket"] передаёт в веб-браузер значения
["websocket"] = function(nodes) -- вычисленных узлов в виде JSON:
return({ -- {
sim_id = "1", -- "sim_id":"1",
timeout = nodes.timeout and nodes.N1_timeout.inited or "600", -- "timeout": "180",
wait_timer = nodes.timeout and tostring(nodes.N1_timeout.value), -- "wait_timer": "179"
}) -- }
end
},
}
Как это работает
| Что делает | Как |
|---|---|
| Передаёт данные в веб-интерфейс | Через WebSocket |
| Формат передачи | JSON |
| Частота обновления | На каждой итерации выполнения правила |
| Содержимое | Значения указанных логических узлов |
В примере выше узел N3_web_update передаёт в браузер:
- sim_id — идентификатор SIM-карты
- timeout — начальное значение таймера
- wait_timer — текущее значение обратного отсчёта